1990-Club80-31 S.25-32
Club 80 Projekt:Bau einer Terminal-Karte auf Basis der PC-Hercules-KarteDer GENIE 1 mit Hercules-Karte als Video-Interface ist ja ganz witzig aber für die meisten Club-Mitglieder uninteressant, weil die Strippenzieherei einfach zu aufwendig ist und die Festlegung auf die GENIE-Kompatibilität zu beengend ist. Um das günstige Preis/Leistungs-Verhältnis der Hercules allgemeiner zugänglich zu machen, wurde angeregt, als Projekt im Club 80 eine Terminal-Karte zu bauen, die zusammen mit der Hercules in jedem Computer als Konsole eingesetzt werden kann. Das Terminal soll mit Z80-Power und entsprechender Betriebssoftware fast ein eigenständiger Text-/Grafik-Computer sein, der in Arbeitsteilung mit der CPU Video-Ausgaben erledigt. Da eine EGA- oder VGA-Karte ähnlich wie die Hercules-Karte funktioniert (erweiterter I/O-Adreßbereich, anderer Memory-Adreßbereich), ist das Prinzip auch auf diese Karten anwendbar. Es bestehen dort aber bei den über die IBM-Vorgaben hinausgehenden Features unterschiedliche Lösungen, die nicht ausreichend dokumentiert sind. Außerdem benötigen diese Karten Monitore, deren Preise weit über den Aktionsradius des Bastlers hinausgehen, so daß wir uns zunächst auf die Hercules-Karte beschränken sollten. Wenn wir das im Griff haben, können wir immer noch überlegen, ob wir nach den Sternen greifen wollen. Von Andreas Magnus habe ich als letzte Meldung vor längerer Zeit erfahren, daß er auch schon einen entsprechenden Artikel ins Info gesetzt hat; ich weiß allerdings nicht, was er dort schon angekündigt hat. Deshalb möge man mir nachsehen, wenn einige Aussagen hier zum zweiten mal erscheinen. Da inzwischen schon etwas festere Vorstellungen bestehen, ist dieser Beitrag aber unumgänglich. Die Kommunikation der Terminal-Karte mit der CPU soll über einen bidirektionalen Parallelport (Datenaustausch) und einen Statusport (Handshaking) erfolgen. Zwischen CPU und Terminal werden Befehle der CPU an das Terminal vereinbart, die das Terminal zur selbständigen Bearbeitung der Hercules anregen. Die bisherige Vorstellung sieht dabei im Textmodus die Emulation eines Televideo 950 Terminals und im Grafikmodus die eines Tektronix 4014 Grafikterminals vor. Während für die Hardware des Terminals schon feste Vorstellungen bestehen, ist für die Betriebssoftware noch alles offen. Zur Erstellung eines Betriebsprogramms für das Terminal sind alle Club-Mitglieder herzlich eingeladen. Der Umfang der zu erstellenden Software ist so groß, daß jedes Gramm Gehirnschmalz im Club gefragt ist. Durch das Herumwerkeln mehrerer Programmierer ist die Funktion eines Software-Koordinators nötig (Freiwillige bitte vortreten !). Dieser Job bedeutet, einen Überblick über die Gesamtarbeit zu gewinnen, diese in Module zu unterteilen und die Zusammenarbeit der einzelnen Module durch Festlegen von gemeinsam genutzten Datenfeldern und zu übernehmenden und zu übergebenden Parametern der einzelnen Module (in den CPU-Registern) zu gewährleisten. Diese Vorgaben sind von den Programmierern der einzelnen Module einzuhalten. Wer dazu Vorstellungen hat, möge bitte nicht durch bescheidene Zurückhaltung versuchen, einen guten Eindruck zu machen. Auch wenn jemand zu Teilaspekten der Betriebssoftware Ideen hat und die Programmierung dieses Parts übernehmen möchte (oder auch nur seine Idee einbringen möchte), kann er einen wertvollen Beitrag zu dem Projekt leisten. Als Bestechung in Naturalien bekommt jeder, der sich an dem Projekt beteiligt, von mir eine geätzte Terminalkarte geschenkt, die er allerdings selbst und mit eigener Finanzierung der Bauteile aufbauen muß. Hercules-Karten kann ich auch günstig beibringen (zur Zeit für 40,-DM). Wer den Job des Software-Koordinators übernehmen will, bekommt auch die Hercules geschenkt (wenn der Club mit seinem gewaltigen Konto das nicht übernehmen will, stifte ich die Karte). Um das ganze Projekt etwas konkreter darzustellen, will ich im folgenden die bestehenden Vorstellungen zur Hardware und Software, wie Andreas Magnus und ich uns das vorstellen, breittreten. Wie gesagt, davon ist noch nichts endgültig. Insbesondere bei der Software-Vorstellung kann noch alles ganz anders gestaltet werden. Das Folgende ist also nur als Diskussionsgrundlage zu werten. So könnte die Hardware aussehen: Das Terminal ist ein Z80-Computer mit 32K Arbeitsspeicher und 32K Hercules-Video-RAM. Nach dem Einschalten besteht der Arbeitsspeicher beim Lesen aus EPROM und beim Schreiben aus RAM. Durch ein LDIR wird der EPROM-Inhalt bei der Initialisierung ins RAM kopiert. Danach wird das EPROM abgeschaltet und beim Lesen und Schreiben in den unteren 32K erreicht der Z80 das RAM. Die oberen 32K des Z80 sind dem Video-RAM der Hercules vorbehalten. Hier können die beiden 32K HRG-Pages der Hercules bzw. das Text-/ Attribut-Video-RAM eingeblendet werden. Im Textmodus bietet die Hercules-Karte 8 linear hintereinander liegende Seiten mit je 4K Text-/Attribut-Speicher. Im I/O-Adreßraum des Terminal-Z80 sind die Hercules-internen Ports, das Interface zum Host-Computer, ein Latch zur Einstellung der Konfiguration des Terminals und ein Tastatur-Interface unterzubringen. Zur Vereinfachung der Hardware scheinen folgende Portadressen die sinnvollsten zu sein: B0H-BFH interne Ports der Hercules-Karte (siehe Artikel zur Hercules im GENIE) 00H Status-Register des Interface zum Host-Computer 01H Daten-Register des Interface zum Host-Computer 02H Konfigurations-Latch 03H Tastatur Das Konfigurations-Latch unterstützt bislang folgende Befehle: OUT (02H),0 Einschalten des Text-/Attribut-Speichers im Textmodus bzw. der HRG-Seite 0 im Grafik-Modus OUT (02H),1 Einschalten der HRG-Seite 1; im Text-Modus ist der Text-Speicher nicht verfügbar OUT (02H),2 im Bereich 0-32K ist bei Leseoperationen das EPROM eingeblendet OUT (02H),3 sowohl beim Lesen als auch beim Schreiben liegt im Be- reich 0-32K RAM vor OUT (02H),5 und danach OUT (02H),4 Zurücksetzen des Interface der PC-XT-Tastatur Die Ausgabe der Werte 6-15 kann für weitere Konfigurations-Einstellungen benutzt werden. D0 gibt dabei jeweils den Pegel einer entsprechenden Steuerleitung wieder (Q3-Q7 des 74LS259-Latch) und D1-D3 geben vor, welche Steuerleitung geschaltet werden soll. Die Portadressen, unter denen das Terminal für den Host-Computer erreichbar sein soll, lassen sich über Jumper in Schritten von 4 beliebig einstellen. Die Basisadresse X+0 ist das Status-Register. D0 des Status-Registers zeigt an, ob das Terminal ein weiteres Byte annehmen kann: D0=0 : das Terminal kann ein weiteres Byte annehmen =1 : es darf noch kein weiteres Byte an das Terminal ausgegeben werden D7 gibt an, ob das Terminal bei der Ausgabe von Daten an den Host ein neues Byte bereitgestellt hat: D7=0 : es steht kein neues Byte des Terminals bereit =1 : das Terminal hat ein neues Byte ausgegeben Je nach Zustand der Bits 0 und 7 des Status-Ports kann die CPU an den Daten-Port X+1 ein weiters Byte ausgeben bzw. von dort ein weiteres Byte abholen. Für den Z80 des Terminals liegen die Adressen der Ports des Interface fest (00H = Status-Register; 01H = Daten-Register). Durch Lesen des Satus-Registers kann der Terminal-Z80 feststellen, ob er Daten entge- gennehmen kann/muß bzw. ausgeben kann/muß: D0=0 : es kann/muß ein weiteres Byte an den Host ausgegeben werden (der Host hat das letzte Byte abgeholt) =1 : es darf noch kein weiteres Byte an den Host ausgegeben wer- den D7=0 : es liegt kein neues Byte vom Host vor =1 : der Host hat ein neues Byte ausgegeben, das abzuholen ist Zur Vereinfachung der Kommunikation zwischen Host und Terminal wird am Terminal-Z80 ein Interrupt erzeugt, wenn der Host ein neues Datum ausgegeben hat. Als Tastatur kann wahlweise eine 8Bit-Parallel-ASCII-Tastatur oder eine serielle PC-XT-Tastatur verwendet werden. Beide Interfaces sind bei der bislang bestehenden Prototypen-Karte vorhanden und können durch Jumper selektiert werden. Wenn von der Tastatur ein Byte gekommen ist, wird am Terminal-Z80 ein /NMI ausgelöst. Und das sollte die Software unterstützen: In allen vorgesehenen Betriebsmodi des Terminals sind Umschaltbefehle möglich, die in einen jeweils anderen Modus umschalten oder sonstige Spezialaufgaben erledigen: 1) Einschalten des TVI 950 Textmodus (Grundeinstellung) 2) Einschalten des Tektronix 4014 Grafikmodus 3) Umschalten zwischen Local Mode und OnLine-Betrieb 4) Übernehmen eines Maschinenprogramms vom Host; Der Befehl enthält als Parameter Ladeadresse, Länge und Call-Adr. 5) Umschalten zwischen Video- und Drucker-Ausgabe 6) Übernahme eines Initialisierungsstrings und der Bit-Grafik-Ein- leitung für den jeweils an der Hercules angeschlossenen Drucker 7) Hardcopy des Bildschirmes (sowohl Text als auch Grafik, was gerade eingestellt ist) Die ersten 3 Punkte machen schon ein recht ansehnliches Terminal aus. Die Übernahme und optionale Ausführung von Maschinenprogrammen hat hauptsächlich in der Entwicklungsphase der Software ihre Bedeutung. Außerdem erlaubt sie auch später noch den Mißbrauch der Z80-Power des Terminals für Anwenderzwecke. Der Punkt 5 erschlägt mit dem Terminal auch gleich eine Drucker-Schnittstelle. Die Punkte 6 und 7 drängen sich bei der gemeinsamen Lage von Video- und Drucker-Interface geradezu auf. Als Grundstock an Treiberroutinen müssen die Initialisierung des Textbildschirms und des Grafikbildschirms sowie ein Tastatur-Treiber vorhanden sein. Für die beiden Video-Modi muß je ein Interpreter für die im jeweiligen Modus gültigen Control-Codes und Escape-Sequenzen existieren, der auch immer die oben angeführten globalen Umschaltbefehle mit berücksichtigt. Die Befehle des Terminals Grip 5.x Um irgendwo anzufangen, habe ich mir die Leistungen der GRIP 5.X von Conitec als Vorlage für das Hercules-Terminal herangezogen. Dort werden ebenfalls ein TVI 950 Textterminal und ein Tektronix 4014 Grafikterminal unterstützt, eine Tastatur und ein Drucker angeschlossen und ähnliche Zusatzleistungen bereitgestellt. Die mit dem Hercules-Terminal möglichen Befehle der GRIP seien im Folgenden mit knapper Beschreibung zusammengestellt. Alle Features der GRIP, die sich bei derselben als unschön erwiesen haben, sind hier garnicht erst aufgeführt. ESC ESC 'A' 1BH 1BH 41H TVI 950 Textmodus einschalten (Einstellung nach RESET) TVI 950 Steuercodes: ^H 08H Cursor nach links ^I 09H Cursor nach rechts (mit Scroll) ^K 0BH Cursor eine Zeile hoch ^V 16H Cursor eine Zeile runter (mit Scroll) ^J 0AH Line Feed (wie ^V) ^M 0DH Carriage Return, Cursor an den Zeilenanfang ^_ 0FH Neue Zeile (= Carriage Return + Line Feed) ^^ 1EH Cursor Home (Zeile 0, Spalte 0) ohne ClrScr ^Z 1AH Bildschirm löschen ^L 0CH Form Feed (:= Clear Screen + Cursor Home) ^G 07H Rabatz auslösen (muß außerhalb des Terminals erzeugt werden) TVI 950 Escape-Sequenzen; ESC '+' Form Feed (wie ^L) ESC ';' Form Feed (wie ^L) ESC '.' a Cursor Attribut setzen a = '0' unsichtbarer Cursor '1' Blinkender Block (nach Reset) '2' stehender Block '3' blinkender Unterstrich '4' stehender Unterstrich '5' '6' '7' diverse User Cursor ESC '=' y x Cursorposition setzen ESC '?' Corsorposition abfragen Antwort: y x |